#ifndef _LUA_EXPORT_HEADER_H_
#define _LUA_EXPORT_HEADER_H_
extern "C"
{
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
}

#include <assert.h>
#include <new>

#include "luaexportbase.h"
#include "luaexportprint.h"
#include "luaexporttraits.h"


namespace LuaImpl
{
#ifdef _DEBUG
  struct LuaCheckStack
  {
    LuaCheckStack(lua_State* L,int n)
    {
      mTop=lua_gettop(L)+n;
      mL=L;
    }
    ~LuaCheckStack()
    {
      int top=lua_gettop(mL);
      assert(top==mTop);
    }
    int mTop;
    lua_State* mL;
  };
#define LUA_CHECKSTACK(L) LuaImpl::LuaCheckStack _lua_check_stack_variable(L,0)
#define LUA_N_CHECKSTACK(L,n) LuaImpl::LuaCheckStack _lua_check_stack_variable(L,n)
#else
#define LUA_CHECKSTACK(L) ((void)0)
#define LUA_N_CHECKSTACK(L,n) ((void)0)
#endif

void LuaPushMetatable(lua_State* L,const char* module);
void LuaPushGlobal(lua_State* L,const char* module);

}

#endif//_LUA_EXPORT_HEADER_H_
